package com.fancy.common.utils;

import java.io.FileInputStream;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 获取配置信息类
 * 
 * @author xinfeng.hu 2013-3-13下午12:15:34
 * @version 1.0.0
 * @category 杭州广桥网络技术有限公司(商业先知)
 */
public final class Config {

	private static final Logger logger = LoggerFactory.getLogger(Config.class);

	private Config() {
		// Nothing
	}

	// 配置类
	private static Properties props = new Properties();

	static {
		try {
			String path = Config.class.getClassLoader().getResource("").getPath().replaceAll("%20", " ");
			if (path.indexOf("classes") == -1) {
				path += "WEB-INF/classes/";
			}
			props.load(new FileInputStream(path + "properties/config.properties"));
		} catch (Exception e) {
			logger.error("init config file error", e);
			// TODO 以后加上
			//System.exit(-1);
		}
	}

	public static Properties getProp() {
		return props;
	}

	/**
	 * 转换String to boolean
	 * 
	 * @param value
	 * @return
	 */
	private static boolean converToBoolean(String value) {
		String tmp = value.toLowerCase();
		if (tmp.equals("true")) {
			return true;
		} else if (tmp.equals("false")) {
			return false;
		} else {
			throw new RuntimeException("class not matching.");
		}
	}

	/**
	 * 获取key指定的值
	 * 
	 * @param key
	 * @return
	 */
	public static boolean getBoolean(String key) {
		return Config.getBoolean(key, false);
	}

	/**
	 * 获取key指定的值，如果key不存在返回指定默认值
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static boolean getBoolean(String key, boolean defaultValue) {
		String value = Config.getString(key);
		try {
			return Config.converToBoolean(value);
		} catch (Exception e) {
			return defaultValue;
		}
	}

	/**
	 * 转换String to integer
	 * 
	 * @param value
	 * @return
	 */
	private static int converToInteger(String str) throws Exception {
		return Integer.parseInt(str);
	}

	/**
	 * 获取key指定的值
	 * 
	 * @param key
	 * @return
	 */
	public static int getInt(String key) {
		return Config.getInt(key, 0);
	}

	/**
	 * 获取key指定的值，如果key不存在返回指定默认值
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static int getInt(String key, int defaultValue) {
		String value = Config.getString(key);
		try {
			return Config.converToInteger(value);
		} catch (Exception e) {
			return defaultValue;
		}
	}

	/**
	 * 转换String to long
	 * 
	 * @param value
	 * @return
	 */
	private static long converToLong(String str) throws Exception {
		return Long.parseLong(str);
	}

	/**
	 * 获取key指定的值
	 * 
	 * @param key
	 * @return
	 */
	public static long getLong(String key) {
		return Config.getLong(key, 0L);
	}

	/**
	 * 获取key指定的值，如果key不存在返回指定默认值
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static long getLong(String key, long defaultValue) {
		String value = Config.getString(key);
		try {
			return Config.converToLong(value);
		} catch (Exception e) {
			return defaultValue;
		}
	}

	/**
	 * 获取key指定的值
	 * 
	 * @param key
	 * @return
	 */
	public static String getString(String key) {
		return Config.getString(key, null);
	}

	/**
	 * 获取key指定的值，如果key不存在返回指定默认值
	 * 
	 * @param key
	 * @param defaultValue
	 * @return
	 */
	public static String getString(String key, String defaultValue) {

		String value = props.getProperty(key);
		if (value == null) {
			value = defaultValue;
		}
		return value;
	}

}
